package initialize

import (
	"github.com/spf13/viper"
	"go.uber.org/zap"
)

// 获取系统变量
func GetSystemConfig() bool {
	//使用viper自动读取环境变量
	viper.AutomaticEnv()
	//获取名为SHOP_MODE的环境变量值
	getString := viper.GetString("SHOP_MODE")
	//根据获取到到值判断是否为生产环境
	if getString == "dev" {
		return false //如果是dev 则返回false 为非生产环境
	} else if getString == "prod" {
		return true // 如果环境变量为 prod，则返回 true，表示生产环境
	}
	return false // 默认情况下返回 false，以防止未设置 SHOP_MODE 环境变量时的异常情况
}

// 日志
func Logger() (*zap.Logger, error) {
	//获取系统配置，判断当前的环境
	cfg := GetSystemConfig()
	if cfg {
		//如果是生产环境 则创建生产环境下的日志配置
		config := zap.NewProductionConfig()
		config.OutputPaths = []string{
			"./logger.log", //生产环境下 日志输出到logger.log文件中
		}
		return config.Build() // 构建并返回生产环境的 zap.Logger
	} else {
		// 如果是非生产环境（开发环境等），创建开发环境的日志配置
		development, err := zap.NewDevelopment()
		return development, err // 返回开发环境的 zap.Logger 和可能的错误
	}
}

// 初始化日志
func InitLogger() {
	// 获取日志对象及可能的错误
	logger, err := Logger()
	if err != nil {
		panic(err) // 如果初始化日志失败，直接抛出错误并终止程序
	}
	zap.ReplaceGlobals(logger) // 替换全局 logger 为初始化的 logger
}
